[アップデート] AWS Chatbot が Amazon Q Developer を使用して AWS リソースについてチャットで回答してくれる機能をサポートしました
リテールアプリ共創部の中野です。
本日、Amazon Q Developer を使用して AWS リソースについてチャットで回答してくれる機能をサポートしました。
AWS Chatbot が Microsoft Teams と Slack にて利用できます。
Microsoft Teams や Slack 上で@aws を先頭につけて質問することで、質問に対して回答してくれるようです。
Amazon Q を使ったリソースのチャット機能はマネジメントコンソール上でできておりましたが、今回のアップデートでチームの Slack などに導入して Slack からリソースに対する質問を投げかけることができるようになりました。
ChatOps をしているチームにとって、AWS リソースに対するトラブルシューティングをチャット上で完結できるため、さらに便利になるのではないでしょうか。
今回は実際の動作を試しました。
やってみた
今回は Slack を使って実施してみます。
設定
- Chatbot に付与する IAM ロール作成
事前に Chatbot へ付与する IAM ロールを作成します
IAM ポリシーは AmazonQDeveloperAccess の管理ポリシーをアタッチします。
Chatbot に対して Amazon Q へアクセスして回答を要求するための許可が付与されました。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowAmazonQDeveloperAccess",
"Effect": "Allow",
"Action": [
"q:StartConversation",
"q:SendMessage",
"q:GetConversation",
"q:ListConversations",
"q:PassRequest",
"q:StartTroubleshootingAnalysis",
"q:StartTroubleshootingResolutionExplanation",
"q:GetTroubleshootingResults",
"q:UpdateTroubleshootingCommandResult",
"q:GetIdentityMetaData",
"q:GenerateCodeFromCommands",
"q:UsePlugin"
],
"Resource": "*"
},
{
"Sid": "AllowCloudControlReadAccess",
"Effect": "Allow",
"Action": ["cloudformation:GetResource", "cloudformation:ListResources"],
"Resource": "*"
},
{
"Sid": "AllowSetTrustedIdentity",
"Effect": "Allow",
"Action": ["sts:SetContext"],
"Resource": "arn:aws:sts::*:self"
}
]
}
- Chatbot で Slack の設定
次に Chatbot で Slack のワークスペースと連携するために設定をおこないます。
パスコード入力が終わると、 Slack ワークスペースとの連携は完了です。
なお、Slack に@aws の招待も必要ですので、招待しておきます。
/invite @aws
今度はチャネルを作成して、特定の Slack チャンネルへ接続します。
Slack のチャネル ID と設定名を入力します。
チャネル ID を調べる方法は、[チャネル詳細を表示する] > [チャネル ID]から確認できます。
このとき前述で作成した IAM ロールとガードレールにAmazonQDeveloperAccess
を設定します。
Chatbot で利用する SNS トピックを指定して作成は完了です
- [オプション] Resource Explorer を有効化
公式ドキュメントには、マルチリージョンのリソースベースのクエリに Resource Explorer を使用すると記載があったため、有効化しておきます。
Amazon Q が無効になっている場合は、Resource Explorer ベースの検索を使用して質問に回答するようです。
We recommend using Amazon Q to answer your resource related queries. Alternatively, you can use Resource Explorer for multi-region resource based queries. If Amazon Q is disabled, we attempt to answer your question using resource explorer based search. If you have both Resource Explorer and Amazon Q enabled, Amazon Q is used to answer your resource questions.
チャットで会話
- 日本語でリソースについて質問
ドキュメントで確認できなかったですが、日本語での質問は現時点では回答できないみたいでした。
@aws API Gatewayはなんですか?
@Yoshiyuki Nakano
- Invalid input. Valid characters are A-Z a-z . , ? ! @ & : ; ( ) ' " - . Exception: C++ and C# are allowed.
- 英語でリソースについて質問
英語で API Gateway の内容を回答してくれました。
@aws What is API Gateway?
@Yoshiyuki Nakano
- API Gateway is a fully managed service provided by Amazon Web Services (AWS) that enables developers to create, publish, maintain, monitor, and secure APIs at any scale. It supports both RESTful APIs and WebSocket APIs, catering to different types of workloads and use cases.
When you create a RESTful API using API Gateway, you are essentially building a collection of resources and methods that are integrated with backend HTTP endpoints, AWS Lambda functions, or other AWS services. This setup allows for the creation of a request-response model, which is suitable for applications requiring synchronous communication. With API Gateway, you can manage the entire API lifecycle, from creation to monitoring production APIs.
Here's a step-by-step breakdown of what you can do with API Gateway:
1. Develop REST APIs: Create and manage resources and methods, define request and response structures, and integrate with backend services.
2. Publish REST APIs: Make APIs available for customers to invoke by creating API keys, managing stages, and deploying API versions.
3. Optimize API performance: Implement caching, throttling, and other techniques to improve API response times and reduce latency.
4. Distribute APIs: Distribute APIs to clients using Amazon CloudFront, API Gateway Edge Optimized, or custom domain names.
5. Protect APIs: Implement security measures such as API keys, IAM roles, and VPC endpoints to secure APIs.
6. Monitor APIs: Monitor API usage, performance, and errors using Amazon CloudWatch metrics and logs.
API Gateway handles various integration types, including HTTP endpoints, Lambda functions, and other AWS services. It also offers features like WebSocket support, custom domain names, and custom error messages. Additionally, API Gateway has a tiered pricing model, with no minimum fees or startup costs, and you pay only for the API calls you receive and the amount of data transferred out.
Sources
[1] Amazon API Gateway concepts - Amazon API Gateway
[2] API Gateway REST APIs - Amazon API Gateway
[3] API Management - Amazon API Gateway - AWS
- 東京リージョンで稼働している EC2 インスタンスの回答
最初に既存の IAM ロールのまま Chatbot で問い合わせると、権限がないとのエラーが出ました。
詳細を確認するために CloudTrail を確認したところ、EC2 に対する参照権限がないためエラーが発生していたようでした。
{
"eventVersion": "1.10",
"userIdentity": {
"type": "AssumedRole",
"principalId": "-********:chatbot-session-slack--********",
"arn": "arn:aws:sts::-********:assumed-role/chatbot-to-amazon-q-role/chatbot-session-slack--********",
"accountId": "-********",
"sessionContext": {
"sessionIssuer": {
"type": "Role",
"principalId": "-********",
"arn": "arn:aws:iam::-********:role/chatbot-to-amazon-q-role",
"accountId": "-********",
"userName": "chatbot-to-amazon-q-role"
},
"attributes": {
"creationDate": "2024-11-19T01:18:47Z",
"mfaAuthenticated": "false"
}
},
"invokedBy": "chatbot.amazonaws.com"
},
"eventTime": "2024-11-19T01:18:57Z",
"eventSource": "ec2.amazonaws.com",
"eventName": "DescribeInstances",
"awsRegion": "ap-northeast-1",
"sourceIPAddress": "chatbot.amazonaws.com",
"userAgent": "chatbot.amazonaws.com",
"errorCode": "Client.UnauthorizedOperation",
"errorMessage": "You are not authorized to perform this operation. User: arn:aws:sts::-********:assumed-role/chatbot-to-amazon-q-role/chatbot-session-slack-******** is not authorized to perform: ec2:DescribeInstances because no identity-based policy allows the ec2:DescribeInstances action",
"requestParameters": {
"maxResults": 25,
"instancesSet": {},
"filterSet": {
"items": [
{
"name": "instance-state-name",
"valueSet": {
"items": [
{
"value": "running"
}
]
}
}
]
}
},
--- 省略 ---
}
詳細をドキュメントで調べると、Amazon Q のドキュメントに前提条件としてリソースに対する質問については、リソースへアクセスするための権限が必要であることが書いてありました。
Permissions to access the resources you ask about. For example, if you ask Amazon Q to list your Amazon S3 buckets, you must have the s3:ListAllMyBuckets permission.
Amazon Q will never access resources that your IAM identity doesn't have access to.
そのため、IAM ロールへ EC2 インスタンスへの参照ポリシーを付与したところ回答してくれるようになりました。
私の環境では EC2 インスタンスがないため、このような回答になりました。
@aws show ec2 instances in running state in ap-northeast-1?
@Yoshiyuki Nakano
- Sorry, there were no Amazon Elastic Compute Cloud resources in ap-northeast-1 that matched your query.
- 東京リージョンにある Lambda のランタイムバージョンの回答
東京リージョンにある Lambda のランタイムバージョンをアップデートしたりすることが個人的に多いため、質問してみました。
しっかりリソースと詳細を回答してくれました。
JSON 形式でリソースのメタデータを回答してくれたため、こちらを見るのも良さそうです。
おわりに
AWS Chatbot が Amazon Q Developer を使用して AWS リソースについてチャットで回答してくれる機能をリリースしました。
個人的にはチャットをメインに仕事が進むため、チャット内で完結してくれる非常に便利な機能だと思いました。
この記事が、誰かのお役に立てれば。